<template>
  <a-table
    rowKey="id"
    size="middle"
    bordered
    :loading="loading"
    :columns="columns"
    :dataSource="tableDataWithTotal"
    :pagination="false"
  >
    <template slot="htmlSlot" slot-scope="text">
      <div v-html="text"></div>
    </template>

    <template slot="imgSlot" slot-scope="text,record">
      <div style="font-size: 12px;font-style: italic;">
        <span v-if="!text">无图片</span>
        <img v-else :src="getImgView(text)" :preview="record.id" alt="" style="max-width:80px;height:25px;"/>
      </div>
    </template>

    <template slot="fileSlot" slot-scope="text">
      <span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
      <a-button
        v-else
        ghost
        type="primary"
        icon="download"
        size="small"
        @click="downloadFile(text)"
      >
        <span>下载</span>
      </a-button>
    </template>
  </a-table>
</template>

<script>
import { getAction } from '@api/manage'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'

export default {
  name: 'CwXzzcbzbSubTable',
  mixins: [JeecgListMixin],
  props: {
    record: {
      type: Object,
      default: null,
    }
  },
  data() {
    return {
      description: '新增资产配置表内嵌列表',
      disableMixinCreated: true,
      loading: false,
      dataSource: [],
      // 仅需计算合计的字段（总价）
      totalField: 'totalPrices',
      columns: [
        {
          title: '单位',
          align: 'center',
          dataIndex: 'unit_dictText'
        },
        {
          title: '部门经济分类',
          align: 'center',
          dataIndex: 'bmjjfl_dictText'
        },
        {
          title: '资产分类',
          align: 'center',
          dataIndex: 'zcfl_dictText'
        },
        {
          title: '资产用途（科研/办公）',
          align: 'center',
          dataIndex: 'usedtype_dictText'
        },
        {
          title: '是否租用',
          align: 'center',
          dataIndex: 'sfRent_dictText'
        },
        {
          title: '资产名称',
          align: 'center',
          dataIndex: 'assetName',
        },
        {
          title: '数量',
          align: 'center',
          dataIndex: 'quantity',
        },
        {
          title: '计量单位',
          align: 'center',
          dataIndex: 'jldw',
        },
        {
          title: '单价（元）',
          align: 'center',
          dataIndex: 'unitPrice',
        },
        // 总价字段添加格式化
        {
          title: '总价（万元）',
          align: 'center',
          dataIndex: 'totalPrices',
          customRender: (text) => this.formatNumber(text)
        },
        {
          title: '是否政府采购',
          align: 'center',
          dataIndex: 'sfzfcg_dictText'
        },
        {
          title: '设备预期使用频率',
          align: 'center',
          dataIndex: 'ybyqsypv',
        },
        {
          title: '设备主要规格参数',
          align: 'center',
          dataIndex: 'sbzyggcs',
        },
        {
          title: '购置设备的必要性',
          align: 'center',
          dataIndex: 'gzsbdbyx',
        },
        {
          title: '是否具备安装设备的环境条件',
          align: 'center',
          dataIndex: 'sfjbazsb_dictText'
        },
        {
          title: '是否具备使用设备的专业人员',
          align: 'center',
          dataIndex: 'sfjusysb_dictText'
        },
        {
          title: '是否具备维护设备运行的经费和条件',
          align: 'center',
          dataIndex: 'sfjbwhsb_dictText'
        },
        {
          title: '地点',
          align: 'center',
          dataIndex: 'site',
        },
        {
          title: '必要性（认真填写）',
          align: 'center',
          dataIndex: 'necessity',
        },
        {
          title: '是否续租',
          align: 'center',
          dataIndex: 'sfRelet_dictText'
        },
        {
          title: '定价方式',
          align: 'center',
          dataIndex: 'typeOfPricing',
        },
        {
          title: '租用平均租金（天/平米/元）/购置房屋单价（平米/元）',
          align: 'center',
          dataIndex: 'zypjzj',
        },
        {
          title: '年度',
          align: 'center',
          dataIndex: 'year',
        },
      ],
      url: {
        listByMainId: '/cw/cwXzzcbzbTj/queryCwXzzcbzbByMainId',
      },
    }
  },
  computed: {
    // 带合计行的完整数据
    tableDataWithTotal() {
      if (!this.dataSource || this.dataSource.length === 0) return []

      // 深拷贝原始数据，避免污染原数据
      const newData = JSON.parse(JSON.stringify(this.dataSource))
      // 计算总价字段合计
      const totalPrice = this.calcTotalPrice()

      // 构建合计行：第一列显示“合计”，仅总价字段显示总和
      const totalRow = {
        id: 'total_' + new Date().getTime(), // 唯一ID，避免rowKey重复警告
        unit_dictText: '合计', // 合计文本显示在第一列（单位列）
        bmjjfl_dictText: '',
        zcfl_dictText: '',
        usedtype_dictText: '',
        sfRent_dictText: '',
        assetName: '',
        quantity: '',
        jldw: '',
        unitPrice: '',
        sfzfcg_dictText: '',
        ybyqsypv: '',
        sbzyggcs: '',
        gzsbdbyx: '',
        sfjbazsb_dictText: '',
        sfjusysb_dictText: '',
        sfjbwhsb_dictText: '',
        site: '',
        necessity: '',
        sfRelet_dictText: '',
        typeOfPricing: '',
        zypjzj: '',
        year: '',
        // 总价合计值
        totalPrices: totalPrice
      }

      newData.push(totalRow)
      return newData
    }
  },
  watch: {
    record: {
      immediate: true,
      handler() {
        if (this.record) {
          this.loadData(this.record)
        }
      }
    }
  },
  methods: {
    loadData(record) {
      this.loading = true
      this.dataSource = []
      getAction(this.url.listByMainId, { id: record.id })
        .then((res) => {
          if (res.success) {
            this.dataSource = res.result.records || [] // 兼容无数据场景
          }
        })
        .finally(() => {
          this.loading = false
        })
    },

    /**
     * 数字格式化方法（保留2位小数，适配金额字段）
     */
    formatNumber(text) {
      const num = Number(text)
      return isNaN(num) ? '0.00' : num.toFixed(2)
    },

    /**
     * 计算总价（万元）字段的合计
     */
    calcTotalPrice() {
      const total = this.dataSource.reduce((sum, item) => {
        const val = Number(item[this.totalField])
        return sum + (isNaN(val) ? 0 : val)
      }, 0)
      return this.formatNumber(total)
    },

    // 空实现方法，避免报错（保持Jeecg模板结构一致性）
    downloadFile(text) {},
    getImgView(text) {
      return text
    }
  },
}
</script>

<style scoped>
/* 合计行样式优化，突出显示且适配多列表格 */
::v-deep .ant-table-tbody tr:last-child {
  background-color: #faf0f5 !important;
}
::v-deep .ant-table-tbody tr:last-child td {
  font-weight: 600 !important;
  border-top: 2px solid #ed8936 !important;
  color: #dd6b20 !important;
  text-align: center !important;
  white-space: nowrap !important;
}

/* 表格横向滚动和列宽优化，适配23列表格 */
::v-deep .ant-table-wrapper {
  overflow-x: auto !important;
  min-width: 1500px !important;
}
::v-deep .ant-table-column-title {
  white-space: nowrap !important;
  font-size: 11px !important;
  padding: 8px 4px !important;
}
/* 数据单元格样式优化，提升可读性 */
::v-deep .ant-table-tbody td {
  white-space: nowrap !important;
  font-size: 11px !important;
  padding: 8px 4px !important;
}
/* 表头样式优化，避免挤压 */
::v-deep .ant-table-thead th {
  white-space: nowrap !important;
}
</style>